SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[paChequearIniciodeLicencia67]
@IdCola INT,
@CausaDeError INT,
@Resultado INT OUTPUT,
@Diagnostico VARCHAR(1000) OUTPUT
AS
SET NOCOUNT ON
SET DATEFORMAT dmy
PRINT 'pasa chequeo especifico'
DECLARE @SitRev INT
DECLARE @Fecha1 DATETIME, @Fecha2 DATETIME, @UTCAntMin INT, @UTAntMin INT, @Agente INT, @AntiguedadMinima INT, @Enfermedad INT, @Licencia INT
DECLARE @UTDurMax INT, @FechaAEvaluar DATETIME, @SubServicio INT, @Dias INT, @DuracionMax INT, @FechaProbableDeTermino DATETIME
DECLARE @IDServicioAgente INT 

SELECT @Enfermedad = Enfermedad, @SubServicio = Servicio FROM tb_PlazasDeMovimiento WHERE IdCola = @IdCola
SELECT @IDServicioAgente=ServicioAgente  FROM tb_SubServiciosAgentes WHERE IdSubServicio = @SubServicio

SELECT @Fecha1 = Fecha1, @Fecha2 = Fecha2, @Agente = Agente, @Licencia = Licencia, @FechaProbableDeTermino = FechaTermino, @SitRev= SitRev 
FROM tb_ColaDeMovimientos WHERE IdCola = @IdCola

SELECT @UTCAntMin = UTCAntiguedadMinima, @UTAntMin = UTAntiguedadMinima, @UTDurMax = UTDuracionMaxima 
FROM tb_Licencias WHERE IdLicencia = @Licencia

SELECT @Dias = 0
SELECT @AntiguedadMinima = 0
SELECT @DuracionMax = 365

IF @Fecha2 IS NULL
	IF @FechaProbableDeTermino IS NOT NULL
		SELECT @FechaAEvaluar = @FechaProbableDeTermino
	ELSE
		SELECT @FechaAEvaluar = GETDATE()
ELSE
	SELECT @FechaAEvaluar = @Fecha2
--Ver el acumulado en el año
DECLARE @Acumuladodias INT
DECLARE @Acumuladodias1 INT
DECLARE @fec1 DATETIME
DECLARE @fec2 DATETIME
SET @fec1='01/01/'+CONVERT(VARCHAR, YEAR(@Fecha1))
SET @fec2= GETDATE()
SET @Acumuladodias=(SELECT COUNT(dias) From tb_LicenciasHistoricas WHERE FechaAlta BETWEEN @fec1 AND @fec2 AND Licencia=@Licencia AND Agente=@Agente)

--Cursor para calcular el acumulado de dias correspondiente a esta licencia

  --Vbles del cursor
  Declare @FechaAlta DATETIME 
  Declare @FechaBaja DATETIME
  --Vbles para el acumulado
  Declare @cantidaddias INT
  Declare @cantidaddias1 INT
  set @cantidaddias=0
  set @cantidaddias1=0
  Declare @fc1 DATETIME
  DECLARE @fc2 Datetime
--Declarar el cursor
Declare curAcumuladoDias CURSOR FORWARD_ONLY FOR
Select ss.fechaalta,ss.fechatermino from tb_subserviciosAgentes as ss inner join tb_serviciosAgentes as s on ss.ServicioAgente=s.idServicioAgente inner join tb_Agentes as a on s.Agente=a.idAgente Where a.idAgente=@Agente AND ss.servicioAgente= @IDServicioAgente AND ss.Licencia=@Licencia AND ss.FechaAlta BETWEEN @fec1 AND @fec2 
--ABRIMOS Y RECORREMOS EL CURSOR
open curAcumuladoDias
fetch next from curAcumuladoDias into @FechaAlta, @FechaBaja
while (@@FETCH_STATUS = 0)
BEGIN
  
  SET @fc1=@FechaAlta
  SET @fc2=@FechaBaja
 if @fc2 is not null 
 BEGIN
  IF @fc1 <= GETDATE()
  BEGIN
   SET @fc1=@FechaAlta
   SET @fc2=@FechaBaja
  SET @cantidaddias=@cantidaddias+DATEDIFF(dd,@fc1,@fc2)
  END
  IF @fc1 >  GETDATE()
  BEGIN
  SET @fc1=@FechaAlta
  SET @fc2=@FechaBaja
  SET @cantidaddias1=@cantidaddias1+DATEDIFF(dd,@fc1,@fc2)
  END
  END
fetch next from curAcumuladoDias into @FechaAlta, @FechaBaja
END
close curAcumuladoDias
deallocate curAcumuladoDias		
-- Fin del Cursor

--Verificar q el agente tenga 4 hs laborales diaria
-- Verifico la antiguedad minima que permite la licencia teniENDo en cuenta la UT y la UTC
DECLARE @antiguedad INT
DECLARE @fecha datetime
-- En el Año
IF @UTCAntMin = 1
	BEGIN
	SELECT @fecha = CAST('01/01/'+CAST(YEAR(@Fecha1) AS VARCHAR(4)) AS DATETIME)
	END
-- En el año de servicio?
IF @UTCAntMin = 2
	BEGIN
	SELECT @fecha  = DATEADD(DAY, -365, @Fecha1)
	END
-- en Total
IF @UTCAntMin = 6
	SELECT @fecha = MIN(FechaAlta) FROM tb_ServiciosAgentes WHERE Agente = @Agente group by Agente
-- En el Decenio
IF @UTCAntMin = 5
	BEGIN
	SELECT @fecha='01/01/'+CONVERT(VARCHAR,DATEPART(YEAR,@Fecha1)-9)
	END
-- En el Bieño
IF @UTCAntMin = 4
	BEGIN
	SELECT @fecha = '01/01/'+CONVERT(VARCHAR, YEAR(@Fecha1)-1)
	END
-- En el mes calENDario
IF @UTCAntMin = 3
	BEGIN
	SELECT @fecha='01/'+CONVERT(VARCHAR,DATEPART(MONTH,@Fecha1))+CONVERT(VARCHAR,DATEPART(YEAR,@Fecha1))
	END
--Si la antiguedad se mide en dias Corridos
IF @UTAntMin  = 1
	BEGIN
	EXEC spAntiguedadAgente @Agente, @fecha, @Fecha1, @antiguedad output
	END
ELSE
	EXEC spAntiguedadAgenteHab @Agente, @fecha, @Fecha1, @antiguedad output
-- Verifica la duracion maxima de la licencia. Si no se especifica la fecha de baja se agrega un mensaje de alerta
-- Miro si el sub servicio anterior tambien tenia la misma licencia...
DECLARE @F1 DATETIME
IF @FechaAEvaluar IS NOT NULL
	BEGIN
	IF (SELECT Licencia FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio) = @Licencia
	BEGIN
		IF (@UTDurMax = 1)
		BEGIN
			SELECT @F1 = FechaAlta FROM tb_SubServiciosagentes WHERE idSubServicio = @SubServicio
			SELECT @dias = DATEDIFF(DAY, @F1, @Fecha1)
		END
		ELSE
		BEGIN
			SELECT @F1 = FechaAlta FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio
			EXEC @dias = spDIFDiasHabiles @Fecha1, @FechaAEvaluar
		END
	END		
	IF (@UTDurMax = 1)
		SELECT @dias = @dias+DATEDIFF(DAY, @Fecha1, @FechaAEvaluar)
	ELSE
	BEGIN
		DECLARE @dias2 INT
		EXEC @dias2 = spDIFDiasHabiles @Fecha1, @FechaaEvaluar
		SELECT @Dias = @dias + @dias2
	END

END
--Verificar el Acumulado de Dias
SET @Acumuladodias=@cantidaddias+@Dias
SET @Acumuladodias1=@cantidaddias1+@Dias
DECLARE @totalacumulado INT
set @totalacumulado=@Acumuladodias+@Acumuladodias1
--SELECT @AntiguedadMinima AntiguedadMinima, @Antiguedad Antiguedad, @Dias Dias, @DuracionMax DurMax, @CausaDeError

IF @AntiguedadMinima > @Antiguedad AND ( (@Enfermedad IS NULL) OR (@Enfermedad IS NOT NULL AND @Enfermedad NOT IN (SELECT IdEnfermedad FROM tb_Enfermedades WHERE NoCuentaAntiguedadParaLicencia = 'S')))  AND @CausaDeError = 19
	SELECT @Resultado = 1,@Diagnostico ='*'+'El agente tiene '+CONVERT(VARCHAR, @antiguedad)+' dias de servicio. Para gozar la licencia se necesitan mas de '+CONVERT(VARCHAR, @AntiguedadMinima)
ELSE
 IF @totalacumulado > @DuracionMax
  SELECT @Resultado = 1,@Diagnostico ='*'+'El agente tiene un acumulado de '+CONVERT(VARCHAR, @cantidaddias)+' anterior a la fecha y '+CONVERT(VARCHAR, @cantidaddias1)+' posterior a la fecha'+' Y El agente se tomaria '+CONVERT(VARCHAR, @dias)+' ,total='+CONVERT(VARCHAR, @dias+@cantidaddias1+@cantidaddias)+' dias y no puede tomarse en el año calendario mas de  '+CONVERT(VARCHAR, @DuracionMax)
  --SELECT @Resultado = 1,@Diagnostico ='*'+'El agente tiene un acumulado de'+CONVERT(VARCHAR, @cantidaddias)+'Y El agente se tomaria '+CONVERT(VARCHAR, @dias)+' dias y no puede tomarse en el año calendario mas de  '+CONVERT(VARCHAR, @DuracionMax)
  --IF @Acumuladodias1 > @DuracionMax
  --SELECT @Resultado = 1,@Diagnostico ='*'+'El agente tiene un acumulado de'+CONVERT(VARCHAR, @cantidaddias1)+' dias posterior a la fecha Y El agente se tomaria '+CONVERT(VARCHAR, @dias)+' dias y no puede tomarse en el año calendario mas de  '+CONVERT(VARCHAR, @DuracionMax)
  ELSE
	IF @Dias > @DuracionMax AND @CausaDeError = 19
		SELECT @Resultado = 1,@Diagnostico ='*'+'El agente se tomaria '+CONVERT(VARCHAR, @dias)+' dias y no puede tomarse mas de  '+CONVERT(VARCHAR, @DuracionMax)
	ELSE
		IF @antiguedadminima < @antiguedad AND @Dias < @duracionmax AND @CausaDeError = 19
			SELECT @resultado = 0, @diagnostico = ''
GO
